package cn.mong.util.modelexcel;

import java.awt.Point;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

/**
 * 单元格写入器
 * @author mengxianming@2021-9-10 9:58:32
 *
 */
public interface CellWriter{
    /**
     * see {@link #writeCellValue(int, int, Object, Point, CellStyleCustomizer)}
     * @param row
     * @param col
     * @param val
     */
    void writeCellValue(int row, int col, Object val);

    XSSFCellStyle createBasicStyle();

    /**
     * see {@link #writeCellValue(int, int, Object, Point, CellStyleCustomizer)}
     * @param row
     * @param col
     * @param val
     * @param cellStyle
     */
    void writeCellValue(int row, int col, Object val, CellStyleCustomizer cellStyle);

    /**
     * see {@link #writeCellValue(int, int, Object, Point, CellStyleCustomizer)}
     * @param row
     * @param col
     * @param val
     * @param mergeOption
     */
    void writeCellValue(int row, int col, Object val, Point mergeOption);

    /**
     * - 写入单元格值
     * @param row 从0开始的行号
     * @param col 从0开始的列号
     * @param val 单元格的值 
     * @param mergeOption 合并单元格的参数。x表示合并的列数，应大于等于1；y表示合并的行数,应大于等于1.
     * @param cellStyle 单元格的字符宽度
     * @param removeMergeRegion true则先去重合并区域，则合并单元格
     */
    void writeCellValue(int row, int col, Object val, Point mergeOption, CellStyleCustomizer cellStyle, boolean removeMergeRegion);

    /**
     * 设置列宽（单位为一个字符的宽度，例如传入width为10，表示10个字符的宽度）
     * @param col
     * @param width
     */
    void setColumnWidth(int col, int width);

}